using System;
using System.Collections.Generic;
using System.Text;

namespace NetFx.AST
{

  namespace CSharpBNF
  {

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///
    /// 
    /// CSharp
    /// 
    ///
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////

    #region Bnfs
    //compilation_unit
    //  : using_directive* namespace_member_declaration* attribute_section* EOF?
    //  ; 
    //using_directive
    //  : using_alias_directive
    //  | using_namespace_directive
    //  ;

    //using_alias_directive
    //  : USING IDENTIFIER ASSIGN namespace_or_type_name SEMICOLON
    //  ;

    //using_namespace_directive
    //  : USING namespace_name SEMICOLON 
    //  ;

    //namespace_declaration
    //  : NAMESPACE qualified_identifier namespace_body semicolon?
    //  ;

    //qualified_identifier
    //  : IDENTIFIER
    //  | qualified_identifier DOT IDENTIFIER 
    //  ;

    //namespace_name
    //  : namespace_or_type_name
    //  ;

    //namespace_body
    //  : OPEN_BRACE using_directive* namespace_member_declaration* CLOSE_BRACE
    //  ;

    //namespace_member_declaration
    //  : type_declaration
    //  | namespace_declaration
    //  ;

    //type_declaration
    //  : class_declaration		
    //  | struct_declaration		
    //  | interface_declaration		
    //  | enum_declaration		
    //  | delegate_declaration
    //  ;

    //attribute_section
    //  : OPEN_BRACKET attribute_target_specifier attribute_list CLOSE_BRACKET
    //  | OPEN_BRACKET attribute_list CLOSE_BRACKET
    //  ;

    //attribute_target_specifier
    //  : attribute_target COLON
    //  ;

    //attribute_target
    //  : IDENTIFIER
    //  | EVENT
    //  | RETURN
    //  ;

    //attribute_list
    //  : attribute
    //  | attribute_list COMMA attribute
    //  ;

    //attribute
    //  : attribute_name attribute_arguments?
    //  ;

    //attribute_name
    //  : qualified_identifier
    //  ;

    //attribute_arguments
    //  : positional_argument_list
    //  | positional_argument_list COMMA named_argument_list
    //  | named_argument_list
    //  ;


    //positional_argument_list
    //  : expression
    //  | positional_argument_list COMMA expression
    //  ;

    //named_argument_list
    //  : named_argument
    //  | named_argument_list COMMA named_argument
    //  ;

    //named_argument
    //  : IDENTIFIER ASSIGN expression
    //  ;


    //class_body
    //  :  OPEN_BRACE class_member_declaration* CLOSE_BRACE
    //  ;

    //class_member_declaration
    //  : constant_declaration
    //  | field_declaration
    //  | method_declaration
    //  | property_declaration
    //  | event_declaration
    //  | indexer_declaration
    //  | operator_declaration
    //  | constructor_declaration
    //  | destructor_declaration
    //  | type_declaration
    //  ;

    //struct_declaration
    //  : attribute_section* modifier* STRUCT IDENTIFIER struct_interface* struct_body semicolon?
    //  ;

    //struct_interface
    //  : COLON type_list
    //  ;

    //struct_body
    //  : OPEN_BRACE struct_member_declaration* CLOSE_BRACE
    //  ;

    //struct_member_declaration
    //  : constant_declaration
    //  | field_declaration
    //  | method_declaration
    //  | property_declaration
    //  | event_declaration
    //  | indexer_declaration
    //  | operator_declaration
    //  | constructor_declaration
    //  | type_declaration
    //  | destructor_declaration 
    //  ;

    //constant_declaration
    //  :  attribute_section* modifier+ CONST type constant_declarators SEMICOLON
    //  ;

    //constant_declarators
    //  : constant_declarator 
    //  | constant_declarators COMMA constant_declarator
    //  ;

    //constant_declarator
    //  : IDENTIFIER ASSIGN constant_expression COMMA 
    //  ;

    //field_declaration
    //  :  attribute_section* modifier* type variable_declarators SEMICOLON
    //  ;

    //variable_declarators
    //  : variable_declarator 
    //  | variable_declarators COMMA variable_declarator
    //  ;

    //variable_declarator
    //  : IDENTIFIER ASSIGN variable_initializer
    //  | IDENTIFIER
    //  ;

    //variable_initializer
    //  : expression
    //  | array_initializer
    //  | STACKALLOC type OPEN_BRACKET expression CLOSE_BRACKET
    //  ;

    //method_declaration
    //  : method_header
    //    method_body
    //  ;

    //method_header
    //  :  attribute_section* modifier* type member_name OPEN_PARENS formal_parameter_list? CLOSE_PARENS 
    //  |  attribute_section* modifier* VOID member_name OPEN_PARENS formal_parameter_list? CLOSE_PARENS 
    //  ;

    //method_body
    //  : block
    //  | SEMICOLON
    //  ;

    //formal_parameter_list
    //  : fixed_parameters		
    //  | fixed_parameters COMMA parameter_array
    //  | parameter_array 
    //  ;

    //fixed_parameters
    //  : fixed_parameter	
    //  | fixed_parameters COMMA fixed_parameter
    //  ;

    //fixed_parameter
    //  :  attribute_section*
    //    parameter_modifier?
    //    type
    //    IDENTIFIER
    //  ;

    //parameter_modifier
    //  : REF			
    //  | OUT		
    //  ;

    //parameter_array
    //  :  attribute_section*PARAMS type IDENTIFIER
    //  ;

    //member_name 
    //  : qualified_identifier
    //  ;

    //property_declaration
    //  :  attribute_section* modifier* type member_name OPEN_BRACE accessor_declarations CLOSE_BRACE
    //  ;

    //accessor_declarations
    //  : get_accessor_declaration set_accessor_declaration?
    //  | set_accessor_declaration get_accessor_declaration?
    //  ;

    //get_accessor_declaration
    //  :  attribute_section*GET accessor_body
    //  ;

    //set_accessor_declaration
    //  :  attribute_section*SET accessor_body
    //  ;

    //accessor_body
    //  : block 
    //  | SEMICOLON		
    //  ;

    //interface_declaration
    //  :  attribute_section* modifier* INTERFACE IDENTIFIER interface_base? interface_body
    //  ;

    //interface_base
    //  : COLON interface_type_list
    //  ;

    //interface_type_list
    //  : interface_type
    //  | interface_type_list COMMA interface_type
    //  ;

    //interface_body
    //  : OPEN_BRACE interface_member_declaration* CLOSE_BRACE
    //  ;

    //interface_member_declaration
    //  : interface_method_declaration		
    //  | interface_property_declaration	
    //  | interface_event_declaration 
    //  | interface_indexer_declaration
    //  ;

    //interface_method_declaration
    //  :  attribute_section*new? type IDENTIFIER OPEN_PARENS formal_parameter_list? CLOSE_PARENS SEMICOLON
    //  |  attribute_section*new? VOID IDENTIFIER OPEN_PARENS formal_parameter_list? CLOSE_PARENS SEMICOLON
    //  ;

    //interface_property_declaration
    //  :  attribute_section* new? type IDENTIFIER OPEN_BRACE interface_accesors CLOSE_BRACE
    //  ;

    //interface_accesors
    //  :  attribute_section*GET SEMICOLON
    //  |  attribute_section*SET SEMICOLON
    //  |  attribute_section*GET SEMICOLON attribute_section*SET SEMICOLON 
    //  |  attribute_section*SET SEMICOLON attribute_section*GET SEMICOLON
    //  ;

    //interface_event_declaration
    //  :  attribute_section*new? EVENT type IDENTIFIER SEMICOLON
    //  ;

    //interface_indexer_declaration 
    //  :  attribute_section*new? type THIS OPEN_BRACKET formal_parameter_list? CLOSE_BRACKET
    //    OPEN_BRACE interface_accesors CLOSE_BRACE
    //  ;

    //operator_declaration
    //  :  attribute_section*modifier* operator_declarator block
    //  ;

    //operator_declarator
    //  : type OPERATOR overloadable_operator OPEN_PARENS type IDENTIFIER CLOSE_PARENS
    //  | type OPERATOR overloadable_operator OPEN_PARENS type IDENTIFIER COMMA type IDENTIFIER CLOSE_PARENS
    //  | conversion_operator_declarator
    //  ;

    //overloadable_operator
    //  : BANG 
    //  | TILDE
    //  | OP_INC
    //  | OP_DEC
    //  | TRUE  
    //  | FALSE 
    //  | PLUS 
    //  | MINUS
    //  | STAR 
    //  | DIV 
    //  | PERCENT 
    //  | BITWISE_AND 
    //  | BITWISE_OR 
    //  | CARRET 
    //  | OP_SHIFT_LEFT 
    //  | OP_SHIFT_RIGHT
    //  | OP_EQ 
    //  | OP_NE 
    //  | OP_GT 
    //  | OP_LT 
    //  | OP_GE 
    //  | OP_LE 
    //  ;


    //conversion_operator_declarator
    //  : IMPLICIT OPERATOR type OPEN_PARENS type IDENTIFIER CLOSE_PARENS
    //  | EXPLICIT OPERATOR type OPEN_PARENS type IDENTIFIER CLOSE_PARENS
    //  | IMPLICIT error 
    //  | EXPLICIT error 
    //  ;

    //constructor_declaration
    //  :  attribute_section* modifier* constructor_declarator block
    //  ;

    //constructor_declarator
    //  : IDENTIFIER OPEN_PARENS formal_parameter_list? CLOSE_PARENS constructor_initializer?
    //  ;

    //constructor_initializer
    //  : COLON BASE OPEN_PARENS argument_list? CLOSE_PARENS
    //  | COLON THIS OPEN_PARENS argument_list? CLOSE_PARENS
    //  ;

    //destructor_declaration
    //  :  attribute_section*TILDE IDENTIFIER OPEN_PARENS CLOSE_PARENS block
    //  ;

    //event_declaration
    //  :  attribute_section* modifier* EVENT type variable_declarators SEMICOLON
    //  |  attribute_section* modifier* EVENT type member_name OPEN_BRACE event_accessor_declarations CLOSE_BRACE
    //  ;

    //event_accessor_declarations
    //  : add_accessor_declaration remove_accessor_declaration
    //  | remove_accessor_declaration add_accessor_declaration
    //  ;

    //add_accessor_declaration
    //  :  attribute_section*ADD block
    //  ;

    //remove_accessor_declaration
    //  :  attribute_section*REMOVE block
    //  ;

    //indexer_declaration
    //  :  attribute_section*modifier* indexer_declarator OPEN_BRACE CLOSE_BRACE
    //  ;

    //indexer_declarator
    //  : type THIS OPEN_BRACKET formal_parameter_list? CLOSE_BRACKET
    //  | type qualified_identifier DOT THIS OPEN_BRACKET formal_parameter_list? CLOSE_BRACKET
    //  ;

    //enum_declaration
    //  :  attribute_section* modifier* ENUM IDENTIFIER enum_base? enum_body
    //    semicolon?
    //  ;

    //enum_base
    //  : COLON type
    //  ;

    //enum_body
    //  : OPEN_BRACE opt_enum_member_declarations CLOSE_BRACE
    //  ;

    //opt_enum_member_declarations
    //  : 
    //  | enum_member_declarations comma?
    //  ;

    //enum_member_declarations
    //  : enum_member_declaration 
    //  | enum_member_declarations COMMA enum_member_declaration
    //  ;

    //enum_member_declaration
    //  :  attribute_section*IDENTIFIER 
    //  |  attribute_section*IDENTIFIER ASSIGN expression
    //  ;

    //delegate_declaration
    //  :  attribute_section* modifier* DELEGATE type	IDENTIFIER 
    //  OPEN_PARENS formal_parameter_list? CLOSE_PARENS SEMICOLON
    //  |  attribute_section* modifier* DELEGATE VOID IDENTIFIER 
    //  OPEN_PARENS formal_parameter_list? CLOSE_PARENS SEMICOLON
    //  ;

    //type
    //  : qualified_identifier
    //  | builtin_types
    //  | array_type
    //  | pointer_type	  
    //  ;

    //pointer_type
    //  : type STAR
    //  | VOID STAR
    //  ;

    //non_expression_type
    //  : builtin_types	
    //  | non_expression_type rank_specifier
    //  | non_expression_type STAR
    //  | expression rank_specifier+
    //  | expression STAR 
    //  ;

    //type_list
    //  : type
    //  | type_list COMMA type
    //  ;

    //builtin_types
    //  : OBJECT
    //  | STRING
    //  | BOOL
    //  | DECIMAL
    //  | FLOAT
    //  | DOUBLE
    //  | integral_type
    //  ;

    //integral_type
    //  : SBYTE
    //  | BYTE
    //  | SHORT
    //  | USHORT
    //  | INT
    //  | UINT
    //  | LONG
    //  | ULONG
    //  | CHAR
    //  ;

    //interface_type
    //  : qualified_identifier
    //  ;

    //array_type
    //  : type rank_specifier+
    //  ;

    //primary_expression
    //  : literal
    //  | qualified_identifier
    //  | parenthesized_expression
    //  | member_access
    //  | invocation_expression
    //  | element_access
    //  | this_access
    //  | base_access
    //  | post_increment_expression
    //  | post_decrement_expression
    //  | new_expression
    //  | typeof_expression
    //  | sizeof_expression
    //  | checked_expression
    //  | unchecked_expression
    //  | pointer_member_access
    //  | pointer_element_access
    //  | sizeof-expression
    //  ;

    //literal
    //  : boolean_literal
    //  | integer_literal
    //  | real_literal
    //  | LITERAL_CHARACTER
    //  | LITERAL_STRING
    //  | NULL
    //  ;

    //real_literal
    //  : LITERAL_FLOAT
    //  | LITERAL_DOUBLE
    //  | LITERAL_DECIMAL
    //  ;

    //integer_literal
    //  : LITERAL_INTEGER
    //  ;

    //boolean_literal
    //  : TRUE
    //  | FALSE
    //  ;

    //parenthesized_expression
    //  : OPEN_PARENS expression CLOSE_PARENS
    //  ;

    //member_access
    //  : primary_expression DOT IDENTIFIER
    //  | predefined_type DOT IDENTIFIER
    //  ;

    //predefined_type
    //  : builtin_types
    //  ;

    //invocation_expression
    //  : primary_expression OPEN_PARENS argument_list? CLOSE_PARENS
    //  ; 

    //argument_list
    //  : argument		
    //  | argument_list COMMA argument
    //  ;

    //argument
    //  : expression
    //  | REF variable_reference 
    //  | OUT variable_reference 
    //  ;

    //variable_reference
    //  : expression
    //  ;

    //element_access
    //  : primary_expression OPEN_BRACKET expression_list CLOSE_BRACKET	
    //  | primary_expression rank_specifier+
    //  ;

    //expression_list
    //  : expression
    //  | expression_list COMMA expression
    //  ;

    //this_access
    //  : THIS
    //  ;

    //base_access
    //  : BASE DOT IDENTIFIER
    //  | BASE OPEN_BRACKET expression_list CLOSE_BRACKET
    //  ;

    //post_increment_expression
    //  : primary_expression OP_INC
    //  ;

    //post_decrement_expression
    //  : primary_expression OP_DEC
    //  ;

    //new_expression
    //  : object_or_delegate_creation_expression
    //  | array_creation_expression
    //  ;

    //object_or_delegate_creation_expression
    //  : NEW type OPEN_PARENS argument_list? CLOSE_PARENS
    //  ;

    //array_creation_expression
    //  : NEW type OPEN_BRACKET expression_list CLOSE_BRACKET 
    //    rank_specifier*
    //    array_initializer?
    //  | NEW type rank_specifier+ array_initializer
    //  | NEW type error 
    //  ;

    //rank_specifier
    //  : OPEN_BRACKET dim_separator* CLOSE_BRACKET
    //  ;

    //array_initializer
    //  : OPEN_BRACE CLOSE_BRACE
    //  | OPEN_BRACE variable_initializer_list comma? CLOSE_BRACE
    //  ;

    //variable_initializer_list
    //  : variable_initializer
    //  | variable_initializer_list COMMA variable_initializer
    //  ;

    //typeof_expression
    //  : TYPEOF OPEN_PARENS type CLOSE_PARENS
    //  ;

    //sizeof_expression
    //  : SIZEOF OPEN_PARENS type CLOSE_PARENS
    //  ;

    //checked_expression
    //  : CHECKED OPEN_PARENS expression CLOSE_PARENS
    //  ;

    //unchecked_expression
    //  : UNCHECKED OPEN_PARENS expression CLOSE_PARENS
    //  ;

    //pointer_member_access 
    //  : primary_expression OP_PTR IDENTIFIER
    //  ;

    //unary_expression
    //  : primary_expression
    //  | BANG prefixed_unary_expression
    //  | TILDE prefixed_unary_expression
    //      | OPEN_PARENS expression CLOSE_PARENS unary_expression
    //      | OPEN_PARENS non_expression_type CLOSE_PARENS prefixed_unary_expression
    //  ;

    //prefixed_unary_expression
    //  : unary_expression
    //  | PLUS prefixed_unary_expression
    //  | MINUS prefixed_unary_expression 
    //  | OP_INC prefixed_unary_expression 
    //  | OP_DEC prefixed_unary_expression 
    //  | STAR prefixed_unary_expression
    //  | BITWISE_AND prefixed_unary_expression
    //  ;

    //pre_increment_expression
    //  : OP_INC prefixed_unary_expression 
    //  ;

    //pre_decrement_expression
    //  : OP_DEC prefixed_unary_expression 
    //  ;

    //multiplicative_expression
    //  : prefixed_unary_expression
    //  | multiplicative_expression STAR prefixed_unary_expression
    //  | multiplicative_expression DIV prefixed_unary_expression
    //  | multiplicative_expression PERCENT prefixed_unary_expression 
    //  ;

    //additive_expression
    //  : multiplicative_expression
    //  | additive_expression PLUS multiplicative_expression 
    //  | additive_expression MINUS multiplicative_expression
    //  ;

    //shift_expression
    //  : additive_expression
    //  | shift_expression OP_SHIFT_LEFT additive_expression
    //  | shift_expression OP_SHIFT_RIGHT additive_expression
    //  ; 

    //relational_expression
    //  : shift_expression
    //  | relational_expression OP_LT shift_expression
    //  | relational_expression OP_GT shift_expression
    //  | relational_expression OP_LE shift_expression
    //  | relational_expression OP_GE shift_expression
    //  | relational_expression IS type
    //  | relational_expression AS type
    //  ;

    //equality_expression
    //  : relational_expression
    //  | equality_expression OP_EQ relational_expression
    //  | equality_expression OP_NE relational_expression
    //  ; 

    //and_expression
    //  : equality_expression
    //  | and_expression BITWISE_AND equality_expression
    //  ;

    //exclusive_or_expression
    //  : and_expression
    //  | exclusive_or_expression CARRET and_expression
    //  ;

    //inclusive_or_expression
    //  : exclusive_or_expression
    //  | inclusive_or_expression BITWISE_OR exclusive_or_expression
    //  ;

    //conditional_and_expression
    //  : inclusive_or_expression
    //  | conditional_and_expression OP_AND inclusive_or_expression
    //  ;

    //conditional_or_expression
    //  : conditional_and_expression
    //  | conditional_or_expression OP_OR conditional_and_expression
    //  ;

    //conditional_expression
    //  : conditional_or_expression
    //  | conditional_or_expression INTERR expression COLON expression 
    //  ;

    //assignment_expression
    //  : prefixed_unary_expression ASSIGN expression
    //  | prefixed_unary_expression OP_MULT_ASSIGN expression
    //  | prefixed_unary_expression OP_DIV_ASSIGN expression
    //  | prefixed_unary_expression OP_MOD_ASSIGN expression
    //  | prefixed_unary_expression OP_ADD_ASSIGN expression
    //  | prefixed_unary_expression OP_SUB_ASSIGN expression
    //  | prefixed_unary_expression OP_SHIFT_LEFT_ASSIGN expression
    //  | prefixed_unary_expression OP_SHIFT_RIGHT_ASSIGN expression
    //  | prefixed_unary_expression OP_AND_ASSIGN expression
    //  | prefixed_unary_expression OP_OR_ASSIGN expression
    //  | prefixed_unary_expression OP_XOR_ASSIGN expression
    //  ;

    //expression
    //  : conditional_expression
    //  | assignment_expression
    //  ;

    //constant_expression
    //  : expression
    //  ;

    //boolean_expression
    //  : expression
    //  ;

    //class_declaration
    //  :  attribute_section* modifier* CLASS IDENTIFIER class_base? class_body semicolon? 
    //  ;	

    //modifier
    //  : NEW
    //  | PUBLIC
    //  | PROTECTED
    //  | INTERNAL
    //  | PRIVATE
    //  | ABSTRACT
    //  | SEALED
    //  | STATIC
    //  | READONLY
    //  | VIRTUAL
    //  | OVERRIDE
    //  | EXTERN
    //  | VOLATILE
    //  | UNSAFE
    //  ;

    //class_base
    //  : COLON type_list
    //  ;

    //block
    //  : OPEN_BRACE statement* CLOSE_BRACE 
    //  ;

    //statement
    //  : declaration_statement
    //  | embedded_statement
    //  | labeled_statement
    //  ;

    //embedded_statement
    //  : block
    //  | empty_statement
    //      | expression_statement
    //  | selection_statement
    //  | iteration_statement
    //  | jump_statement		  
    //  | try_statement
    //  | checked_statement
    //  | unchecked_statement
    //  | lock_statement
    //  | using_statement
    //  | unsafe_statement
    //  | fixed_statement
    //  ;

    //empty_statement
    //  : SEMICOLON
    //  ;

    //labeled_statement
    //  : IDENTIFIER COLON 
    //    statement
    //  ;

    //declaration_statement
    //  : local_variable_declaration SEMICOLON
    //  | local_constant_declaration SEMICOLON
    //  ;


    //local_variable_type
    //  : primary_expression rank_specifier?
    //  | builtin_types rank_specifier?
    //        ;

    //local_variable_pointer_type
    //  : primary_expression STAR
    //    | builtin_types STAR
    //        | VOID STAR
    //  | local_variable_pointer_type STAR
    //    ;

    //local_variable_declaration
    //  : local_variable_type variable_declarators
    //        | local_variable_pointer_type rank_specifier? variable_declarators
    //  ;

    //local_constant_declaration
    //  : CONST local_variable_type constant_declarator
    //  ;

    //expression_statement
    //  : statement_expression SEMICOLON
    //  ;

    //statement_expression
    //  : invocation_expression		
    //  | object_creation_expression
    //  | assignment_expression
    //  | post_increment_expression
    //  | post_decrement_expression
    //  | pre_increment_expression
    //  | pre_decrement_expression
    //  | error
    //  ;

    //object_creation_expression
    //  : object_or_delegate_creation_expression
    //  ;

    //selection_statement
    //  : if_statement
    //  | switch_statement
    //  ; 

    //if_statement
    //  : IF OPEN_PARENS boolean_expression CLOSE_PARENS embedded_statement
    //  | IF OPEN_PARENS boolean_expression CLOSE_PARENS embedded_statement ELSE embedded_statement
    //  ;

    //switch_statement
    //  : SWITCH OPEN_PARENS expression CLOSE_PARENS switch_block
    //  ;

    //switch_block
    //  : OPEN_BRACE switch_section* CLOSE_BRACE
    //  ;

    //switch_section
    //  : switch_label+ statement_list 
    //  ;

    //switch_label
    //  : CASE constant_expression COLON
    //  | DEFAULT COLON				
    //  | error 
    //  ;

    //iteration_statement
    //  : while_statement
    //  | do_statement
    //  | for_statement
    //  | foreach_statement
    //  ;

    //while_statement
    //  : WHILE OPEN_PARENS boolean_expression CLOSE_PARENS embedded_statement
    //  ;

    //do_statement
    //  : DO embedded_statement 
    //    WHILE OPEN_PARENS boolean_expression CLOSE_PARENS SEMICOLON
    //  ;

    //for_statement
    //  : FOR OPEN_PARENS for_initializer? SEMICOLON for_condition? SEMICOLON for_iterator? CLOSE_PARENS embedded_statement
    //  ;

    //for_initializer
    //  : local_variable_declaration
    //  | statement_expression_list
    //  ;

    //for_iterator
    //  : statement_expression_list
    //  ;

    //statement_expression_list
    //  : statement_expression	
    //  | statement_expression_list COMMA statement_expression
    //  ;

    //foreach_statement
    //  : FOREACH OPEN_PARENS type IDENTIFIER IN expression CLOSE_PARENS embedded_statement 
    //  ;

    //jump_statement
    //  : break_statement
    //  | continue_statement
    //  | goto_statement
    //  | return_statement
    //  | throw_statement
    //  ;

    //break_statement
    //  : BREAK SEMICOLON
    //  ;

    //continue_statement
    //  : CONTINUE SEMICOLON
    //  ;

    //goto_statement
    //  : GOTO IDENTIFIER SEMICOLON 
    //  | GOTO CASE constant_expression SEMICOLON
    //  | GOTO DEFAULT SEMICOLON 
    //  ; 

    //return_statement
    //  : RETURN expression? SEMICOLON
    //  ;

    //throw_statement
    //  : THROW expression? SEMICOLON
    //  ;

    //try_statement
    //  : TRY block catch_clause+ 
    //  | TRY block catch_clause* FINALLY block
    //  | TRY block error 
    //  ;

    //catch_clause 
    //  : CATCH catch_args? block 
    //        ;

    //catch_args 
    //        : OPEN_PARENS type identifier? CLOSE_PARENS 
    //      ;

    //checked_statement
    //  : CHECKED block
    //  ;

    //unchecked_statement
    //  : UNCHECKED block
    //  ;

    //unsafe_statement
    //  : UNSAFE 
    //    block 
    //  ;

    //fixed_statement
    //  : FIXED OPEN_PARENS pointer_type fixed_pointer_declarators CLOSE_PARENS embedded_statement 
    //  ;

    //fixed_pointer_declarators
    //  : fixed_pointer_declarator
    //  | fixed_pointer_declarators COMMA fixed_pointer_declarator
    //  ;

    //fixed_pointer_declarator
    //  : IDENTIFIER ASSIGN expression
    //  ;

    //lock_statement
    //  : LOCK OPEN_PARENS expression CLOSE_PARENS embedded_statement
    //  ;

    //using_statement
    //  : USING OPEN_PARENS resource_acquisition CLOSE_PARENS embedded_statement
    //  ; 

    //resource_acquisition
    //  : local_variable_declaration
    //  | expression
    //  ;
    #endregion
    #region Token Definitions
    //EOF
    //  : EOF
    //  ;
    //NONE
    //  : NONE
    //  ;
    //ERROR
    //  : ERROR
    //  ;
    //ABSTRACT
    //  : "abstract"
    //  ;
    //AS
    //  : "as"
    //  ;
    //ADD
    //  : "add"
    //  ;
    //ASSEMBLY
    //  : "assembly"
    //  ;
    //BASE
    //  : "base"
    //  ;
    //BOOL
    //  : "bool"
    //  ;
    //BREAK
    //  : "break"
    //  ;
    //BYTE
    //  : "byte"
    //  ;
    //CASE
    //  : "case"
    //  ;
    //CATCH
    //  : "catch"
    //  ;
    //CHAR
    //  : "char"
    //  ;
    //CHECKED
    //  : "checked"
    //  ;
    //CLASS
    //  : "class"
    //  ;
    //CONST
    //  : "const"
    //  ;
    //CONTINUE
    //  : "continue"
    //  ;
    //DECIMAL
    //  : "decimal"
    //  ;
    //DEFAULT
    //  : "default"
    //  ;
    //DELEGATE
    //  : "delegate"
    //  ;
    //DO
    //  : "do"
    //  ;
    //DOUBLE
    //  : "double"
    //  ;
    //ELSE
    //  : "else"
    //  ;
    //ENUM
    //  : "enum"
    //  ;
    //EVENT
    //  : "event"
    //  ;
    //EXPLICIT
    //  : "explicit"
    //  ;
    //EXTERN
    //  : "extern"
    //  ;
    //FALSE
    //  : "false"
    //  ;
    //FINALLY
    //  : "finally"
    //  ;
    //FIXED
    //  : "fixed"
    //  ;
    //FLOAT
    //  : "float"
    //  ;
    //FOR	
    //  : "for"
    //  ;
    //FOREACH
    //  : "foreach"
    //  ;
    //GOTO
    //  : "goto"
    //  ;
    //IF	
    //  : "if"
    //  ;
    //IMPLICIT
    //  : "implicit"
    //  ;
    //IN	
    //  : "in"
    //  ;
    //INT	
    //  : "int"
    //  ;
    //INTERFACE
    //  : "interface"
    //  ;
    //INTERNAL
    //  : "internal"
    //  ;
    //IS	
    //  : "is"
    //  ;
    //LOCK
    //  : "lock"
    //  ;
    //LONG
    //  : "long"
    //  ;
    //NAMESPACE
    //  : "namespace"
    //  ;
    //NEW	
    //  : "new"
    //  ;
    //NULL
    //  : "null"
    //  ;
    //OBJECT
    //  : "object"
    //  ;
    //OPERATOR
    //  : "operator"
    //  ;
    //OUT	
    //  : "out"
    //  ;
    //OVERRIDE
    //  : "override"
    //  ;
    //PARAMS
    //  : "params"
    //  ;
    //PRIVATE
    //  : "private"
    //  ;
    //PROTECTED
    //  : "protected"
    //  ;
    //PUBLIC
    //  : "public"
    //  ;
    //READONLY
    //  : "readonly"
    //  ;
    //REF	
    //  : "ref"
    //  ;
    //RETURN
    //  : "return"
    //  ;
    //REMOVE
    //  : "remove"
    //  ;
    //SBYTE
    //  : "sbyte"
    //  ;
    //SEALED
    //  : "sealed"
    //  ;
    //SHORT
    //  : "short"
    //  ;
    //SIZEOF
    //  : "sizeof"
    //  ;
    //STACKALLOC
    //  : "stackalloc"
    //  ;
    //STATIC
    //  : "static"
    //  ;
    //STRING
    //  : "string"
    //  ;
    //STRUCT
    //  : "struct"
    //  ;
    //SWITCH
    //  : "switch"
    //  ;
    //THIS
    //  : "this"
    //  ;
    //THROW
    //  : "throw"
    //  ;
    //TRUE
    //  : "true"
    //  ;
    //TRY	
    //  : "try"
    //  ;
    //TYPEOF
    //  : "typeof"
    //  ;
    //UINT
    //  : "uint"
    //  ;
    //ULONG
    //  : "ulong"
    //  ;
    //UNCHECKED
    //  : "unchecked"
    //  ;
    //UNSAFE
    //  : "unsafe"
    //  ;
    //USHORT
    //  : "ushort"
    //  ;
    //USING
    //  : "using"
    //  ;
    //VIRTUAL
    //  : "virtual"
    //  ;
    //VOID
    //  : "void"
    //  ;
    //VOLATILE
    //  : "volatile"
    //  ;
    //WHILE
    //  : "while"
    //  ;
    //GET 
    //  : "get"
    //  ;
    //SET 
    //  : "set"
    //  ;
    //OPEN_BRACE
    //  : "{"
    //  ;
    //CLOSE_BRACE
    //  : "}"
    //  ;
    //OPEN_BRACKET
    //  : "["
    //  ;
    //CLOSE_BRACKET
    //  : "]"
    //  ;
    //OPEN_PARENS
    //  : "("
    //  ;
    //CLOSE_PARENS
    //  : ")"
    //  ;
    //DOT
    //  :"."
    //  ;
    //COMMA
    //  : ","
    //  ;
    //COLON
    //  : ":"
    //  ;
    //SEMICOLON
    //  : ";"
    //  ;
    //TILDE
    //  : "~"
    //  ;
    //PLUS
    //  : "+"
    //  ;
    //MINUS
    //  : "-"
    //  ;
    //BANG
    //  : "!"
    //  ;
    //ASSIGN
    //  : "="
    //  ;
    //OP_LT
    //  : "<"
    //  ;
    //OP_GT
    //  : ">"
    //  ;
    //BITWISE_AND
    //  : "&"
    //  ;
    //BITWISE_OR
    //  : "|"
    //  ;
    //STAR
    //  : "*"
    //  ;
    //PERCENT
    //  : "%"
    //  ;
    //DIV 
    //  : "/"
    //  ;
    //CARRET
    //  : "^"
    //  ;
    //INTERR
    //  : "?"
    //  ;
    //OP_INC
    //  : "++"
    //  ;
    //OP_DEC
    //  : "--"
    //  ;
    //OP_SHIFT_LEFT
    //  : "<<"
    //  ;
    //OP_SHIFT_RIGHT
    //  : ">>"
    //  ;
    //OP_LE
    //  : "<="
    //  ;
    //OP_GE
    //  : ">="
    //  ;
    //OP_EQ
    //  : "=="
    //  ;
    //OP_NE
    //  : "!="
    //  ;
    //OP_AND
    //  : "&&"
    //  ;
    //OP_OR
    //  : "||"
    //  ;
    //OP_MULT_ASSIGN
    //  : "*="
    //  ;
    //OP_DIV_ASSIGN
    //  : "/="
    //  ;
    //OP_MOD_ASSIGN
    //  : "%="
    //  ;
    //OP_ADD_ASSIGN
    //  : "+="
    //  ;
    //OP_SUB_ASSIGN
    //  : "-="
    //  ;
    //OP_SHIFT_LEFT_ASSIGN
    //  : "<<="
    //  ;
    //OP_SHIFT_RIGHT_ASSIGN
    //  : ">>="
    //  ;
    //OP_AND_ASSIGN
    //  : "&="
    //  ;
    //OP_XOR_ASSIGN
    //  : "^="
    //  ;
    //OP_OR_ASSIGN
    //  : "|="
    //  ;
    //OP_PTR
    //  : "->"
    //  ;

    //LITERAL_INTEGER
    //  : "int literal"
    //  ;
    //LITERAL_FLOAT
    //  : "float literal"
    //  ;
    //LITERAL_DOUBLE
    //  : "double literal"
    //  ;
    //LITERAL_DECIMAL
    //  : "decimal literal"
    //  ;
    //LITERAL_CHARACTER
    //  : "character literal"
    //  ;
    //LITERAL_STRING
    //  : "string literal"
    //  ;


    //IDENTIFIER
    //  : IDENTIFIER
    //  ;
    #endregion
  }

}
